<?php
/**
 * <https://y.st./>
 * Copyright © 2018 Alex Yst <mailto:copyright@y.st>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <https://www.gnu.org./licenses/>.
**/

$xhtml = array(
	'<{title}>' => 'Causing problems',
	'takedown' => '2017-11-01',
	'<{body}>' => <<<END
<section id="dream">
	<h2>Dream journal</h2>
	<p>
		I dreamed I was setting up computers in a bedroom shared by Cyrus and I in a home owned by our mother.
		She&apos;d just gotten us desks and a bunch of cords, such as Ethernet cords and power strips, so we could finally have all this set up.
		We had three power strips, but a coworker (who for some reason lived with us) wanted one.
		I knew we needed all three, but I couldn&apos;t remember why, so I let reluctantly them have one.
		I later remembered we needed one for Cyrus&apos; machine, one for my desktop, and one for my laptop, but it was too late.
		I would just have to not use one for my laptop.
		Cyrus had already had a computer set up, but our mother had unhooked it to move it and get everything else in, so I was going to hook it back up now that there was a good spot for it.
		I saw a hand-made coupon from my mother taped to the wall; it offered Cyrus use of her computer for doing his schoolwork, ten dollars off for the first &quot;season&quot; (probably supposed to be &quot;semester&quot;).
		Our mother had messed up Cyrus&apos; working setup, had not even considered fixing it, and was going to <strong>*charge*</strong> him to use her own, snail-pace machine so he could just get by.
		Lovely.
		I&apos;d have his machine back up and running before he got back into the room and even noticed the coupon though, so he shouldn&apos;t have any problems.
		While I was setting things up, I found three different old Apple machines I for some reason owned.
		For some reason, I thought that I&apos;d needed them just in case, but with this new setup, I wouldn&apos;t need them at all.
		(I know; it makes no sense to me either, now that I&apos;m awake.)
		I&apos;d never intended to use the Apple machines if I didn&apos;t need to though, much preferring non-Apple hardware because it&apos;s easier to install Debian on, so now that I was sure I wouldn&apos;t need them, I put them near the bedroom door to haul out when I was done.
	</p>
	<p>
		That coupon on the wall disgusted me.
		I couldn&apos;t believe my mother would do that.
		I don&apos;t think my subconscious has a high opinion of her right now.
		With her, there&apos;s always a catch.
		It&apos;s usually not monetary, but it&apos;s there.
		I guess my subconscious paraphrased this as &quot;sure, she&apos;ll get you a new desk for your computer, but if she thinks you can&apos;t set your own computer up, she&apos;ll still unhook it (making your new desk pointless), then charge you to use her worse setup just to get by with the damage she&apos;s done&quot;.
		Before I went to bed last night, I was actually thinking about her garbage.
		Next time I see her, which I&apos;ll probably try to make happen tomorrow, she&apos;ll likely ask me about when my next oral surgery is scheduled.
		I&apos;ll tell her it was yesterday.
		(That is, unless it takes so long to see her that I&apos;ve already waited the week and scheduled an actual next procedure, in which case I&apos;ll tell her a vague timeline on that.
		If she pushes for something exact, I&apos;ll tell her it&apos;s the day after it really is, in case she tries to find a way to force her attendance in some way.)
		She&apos;s not going to be happy.
		She&apos;s going to tell me she told me before she wanted to &quot;be there for me&quot;.
		She did indeed tell me that, but she also told me with her actions that while she has an interest in attending, she has no interest in respecting my medical decisions.
		She went on the offensive when I said I wasn&apos;t likely to get implants even once I have insurance that covers them.
		She may be concerned in some way, but she&apos;s not concerned for the actual me, but the <strong>*idea*</strong> of me.
		I can&apos;t be fighting with her and still make sure I get all the information I need from the dentist.
		Without her there, I&apos;m still forgetting to ask certain things sometimes.
		If she&apos;s distracting me though, I&apos;ll forget more, and I won&apos;t know which things I&apos;m forgetting because she&apos;s being her and which because I&apos;m just under stress at all.
		I know I&apos;ll blame it all on her.
		Besides, this refusal to respect my medical decisions is part of a larger patter too, one of her refusing to respect my decisions in general.
		If she wants to be there, which will be for her and not me, she&apos;s going to need to fix up her attitude.
		One by one, she&apos;s going to have to admit to me that my decisions are valid in the form of admitting specific examples that represent classes of decisions.
		She won&apos;t manage.
		She simply can&apos;t accept that others have differing opinions than her, and that her own opinions aren&apos;t the one and only truth.
		After all that, if she does somehow manage to see the light, I&apos;ll tell her that if she wants to be there during stressful situations, I need her to accept me for who and what I am.
		I&apos;m not a man, I&apos;m not her son, and I&apos;m not a &quot;he&quot;.
		In general, I&apos;m not too concerned if people use proper pronouns to refer to me.
		But she&apos;s caused me a lot of pain in the past.
		If she&apos;s going to be there, she&apos;s going to be helping validate who I am, not causing me more stress.
	</p>
</section>
<section id="drudgery">
	<h2>University drudgery</h2>
	<p>
		It appears that due to how tired I was last night, I looked at the workload for the one of my courses twice instead of looking at the workload for each of my courses.
		I do have a discussion assignment in one of my courses after all.
		My discussion post for the day was as follows:
	</p>
	<blockquote>
		<p>
			Am I the only one who can&apos;t get the reading assignment for the week, <a href="http://www1.idc.ac.il/tecs/book/chapter%2006.pdf"><code>http://www1.idc.ac.il/tecs/book/chapter%2006.pdf</code></a>, to load?
			The server is refusing to send me even so much as an error response.
			The Web browser establishes a connection, but then the server doesn&apos;t send any page, no matter how many times I try.
			The connection just times out.
			Meanwhile, all other webpages load just fine as usual (and quickly, even); it&apos;s not a network issue on my end.
			I&apos;ve researched assembler macro commands elsewhere for the discussion assignment, but if something else from the reading material&apos;s going to be on the final exam, I sort of need to know what the reading material has to say.
		</p>
		<p>
			A macro is a named series of assembly language instruction defined using a macro language.
			Within the code, a &quot;call&quot; is made to the macro in places where that code needs to be inserted (Winton, n.d.).
			In this way, a macro is very much like a function is in higher-level languages.
			There&apos;s one major difference between macros and functions though.
			A function is a construct within both the source code and the machine code.
			Execution jumps to and from the function as need be.
			However, a macro exists only as a construct in the source code.
			A macro facility interprets the macros and inserts them anywhere the macros are &quot;called&quot;.
			It basically copies them and pastes them where they&apos;re needed, so a copy of the macro&apos;s code is present everywhere the macro&apos;s used instead of execution jumping around in the instruction memory.
			Some processors support subroutines, which are more similar to functions in that they involve jumping through the instruction space instead of including multiple copies of the code.
			For larger chunks of code, if subroutines are supported, they&apos;re a better option (Shaaban, 1999).
			However, macros are supported not by the $a[CPU], but by the assembler.
			If the processor doesn&apos;t support subroutines, it might be possible to find an assembler for that processor that supports macros as a substitute.
			Likewise, the option of having a separate macro facility that isn&apos;t built into the assembler is available (Winton, n.d.).
		</p>
		<p>
			The reading material from past units has stated that the Hack assembly language isn&apos;t complex enough to include macros.
			However, with a custom assembler (or a separate macro facility), we could use them anyway.
			The syntax of the macro language is determined by the macro facility, so we&apos;d need to define our own macro language.
			The key thing is that we need to define it in such a way that the assembler can tell the difference between the macro language and the assembly language.
			For example, we could use a character not allowed in the assembly language.
			Hack&apos;s assembly language doesn&apos;t allow tildes anywhere, so we could prefix macro-related directives with them.
			We could begin a macro with the <code>~macro</code> directive, end it with the <code>~endmacro</code> directive, and call it with the label we provide the macro, prefixed with a tilde.
			With such a macro language, the words <code>macro</code> and <code>endmacro</code> would be reserved, and not available for use as macro labels.
			Using this setup, we could do something such as the following:
		</p>
		<blockquote>
<pre><code>// A macro defining addition
~macro MACROLABEL
@R0
D=M
@R1
A=M
D=D+A
@R2
M=D
~endmacro

// First addition
@var0
D=M
@R0
M=D
@var1
D=M
@R1
M=D
~MACROLABEL
@R2
D=M
@var2
M=D

// Second addition
@var3
D=M
@R0
M=D
@var4
D=M
@R1
M=D
~MACROLABEL
@R2
D=M
@var5
M=D</code></pre>
		</blockquote>
		<p>
			This macro is pretty pointless, but it shows how a macro could be used.
			Some macro languages provide a way to pass variables in and out (or rather, copy variable names into the pasted code), but this one doesn&apos;t.
			Instead, it loads values from the predefined <code>R0</code> and <code>R1</code> variables and returns a value to the predefined <code>R2</code> variable.
			It is left up to the calling code to load and unload the appropriate values ant the appropriate times.
		</p>
		<div class="APA_references">
			<h3>References:</h3>
			<p>
				Shaaban. (1999). Assembly Language Macros. Retrieved from <a href="http://meseec.ce.rit.edu/eecc250-winter99/250-2-2-2000.pdf"><code>http://meseec.ce.rit.edu/eecc250-winter99/250-2-2-2000.pdf</code></a>
			</p>
			<p>
				Winton, C. (n.d.). Assembly Language Macros. Retrieved from <a href="https://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf"><code>https://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf</code></a>
			</p>
		</div>
	</blockquote>
</section>
END
);
